{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Attack, Defense, and BPDA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Copyright (c) 2018-present, Royal Bank of Canada and other authors.\n",
    "# See the AUTHORS.txt file for a list of contributors.\n",
    "# All rights reserved.\n",
    "#\n",
    "# This source code is licensed under the license found in the\n",
    "# LICENSE file in the root directory of this source tree.\n",
    "#"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "import os\n",
    "import argparse\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "\n",
    "from advertorch.utils import predict_from_logits\n",
    "from advertorch_examples.utils import get_mnist_test_loader\n",
    "from advertorch_examples.utils import _imshow\n",
    "\n",
    "torch.manual_seed(0)\n",
    "use_cuda = torch.cuda.is_available()\n",
    "device = torch.device(\"cuda\" if use_cuda else \"cpu\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Load model that is trained with `tut_train_mnist.py`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/gavin/anaconda3/envs/dev/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "LeNet5(\n",
       "  (conv1): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "  (relu1): ReLU(inplace)\n",
       "  (maxpool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
       "  (conv2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "  (relu2): ReLU(inplace)\n",
       "  (maxpool2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
       "  (linear1): Linear(in_features=3136, out_features=200, bias=True)\n",
       "  (relu3): ReLU(inplace)\n",
       "  (linear2): Linear(in_features=200, out_features=10, bias=True)\n",
       ")"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from advertorch.test_utils import LeNet5\n",
    "from advertorch_examples.utils import TRAINED_MODEL_PATH\n",
    "\n",
    "filename = \"mnist_lenet5_clntrained.pt\"\n",
    "# filename = \"mnist_lenet5_advtrained.pt\"\n",
    "\n",
    "model = LeNet5()\n",
    "model.load_state_dict(\n",
    "    torch.load(os.path.join(TRAINED_MODEL_PATH, filename)))\n",
    "model.to(device)\n",
    "model.eval()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 5\n",
    "loader = get_mnist_test_loader(batch_size=batch_size)\n",
    "for cln_data, true_label in loader:\n",
    "    break\n",
    "cln_data, true_label = cln_data.to(device), true_label.to(device)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Construct a LinfPGDAttack adversary instance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from advertorch.attacks import LinfPGDAttack\n",
    "\n",
    "adversary = LinfPGDAttack(\n",
    "    model, loss_fn=nn.CrossEntropyLoss(reduction=\"sum\"), eps=0.15,\n",
    "    nb_iter=40, eps_iter=0.01, rand_init=True, clip_min=0.0, clip_max=1.0,\n",
    "    targeted=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Perform untargeted attack"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "adv_untargeted = adversary.perturb(cln_data, true_label)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Perform targeted attack"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "target = torch.ones_like(true_label) * 3\n",
    "adversary.targeted = True\n",
    "adv_targeted = adversary.perturb(cln_data, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualization of attacks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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39SWZ8+eHa174YUXmjFEdIHhw4dHsVl8yvaw5liK67tmzZqV67ZOP/30KN5kk01St7/jjjty7R+9w2abbRbFp5xyShRfffXV7RwOWuSLX/xibfnggw+O1m233XYN7XuXXXaJ4hVWeP+zs6effjpa99BDDzV0W2itvn3jad1+++3XoZHEnnzyySg+7bTTonjw4MFRHP52olP4BBkAAAAIMEEGAAAAAkyQAQAAgMByU4N88cUXR3Hec4yffPLJteWFCxdG63zdaTvNmDEjiv399HU9aMztt98exRtuuGEU+9yYP39+4ds64ogjorhfv36F94Xea+zYsVG84oorRvFvf/vbdg4HLXLppZfWlt97772m7vuQQw7pMZ46dWq0zh+3xo8f39SxoDH/+q//GsU77rhjbdnPH9rJ9/H3v7nxxy1qkAEAAICSYYIMAAAABJggAwAAAIHlpgbZ9z3eYostovjZZ5+NYl//suWWW9aWd9ttt2jdDjvsEMXTp0+P4lGjRuUa65IlS2rLc+fOjdb5PrzetGnTopga5Nby9XeNOOOMM6J4o402St3+z3/+c2oMSNJXvvKVKPY5yzGiO915551RHPYmbtTLL78cxYsWLYriMWPG1JbXW2+9aN0TTzwRxX369GnauJCf74N+3XXXRfGkSZNqyxdddFFbxrQsBx54YMduuyg+QQYAAAACTJABAACAABNkAAAAILDc1CDfd999qbF3991397huyJAhURzWJ0sfrOnbdttt6xlizeLFi2vLzz//fLRuwoQJUex7B06ePDnXbaFz9t9//yj+5je/GcX9+/eP4jlz5kTxWWedFcVvvPFGE0eHbuV7vG+zzTZR7I8pZegnimy77rprFPv+1mHv47x9kH/6059G8b333hvFr776ahR/7GMfqy2fffbZqfv+93//9yi+7LLLco0NjfHPz+DBg6N43333rS37WvNW8nMXn9/N7uXdCnyCDAAAAASYIAMAAACB5abEopleeeWVKL7//vtTt88q50hz6KGHRrEv7/j73/8exddff33h20J7+a++fUmF508J/OCDDzZ9TOh+/qtKz7eORDn5Uhl/bB86dGjd+/Kt/W666aYo/sY3vhHFWeVa4f5OOumkaN2aa64Zxf70xQMHDoziH/3oR1H8zjvvpN420h122GFRvN9++0XxCy+8EMV/+ctfWj6mZfGlH76k4oEHHojiBQsWtHpIufEJMgAAABBgggwAAAAEmCADAAAAAWqQO2DYsGG15Z/85CfROn86Ud8abP78+a0bGBpy6623RvFee+2Vuv3VV18dxeecc07Tx4Tljz+1rOdrQlFO/fr1i+I8Ncf+9wlHHnlkFM+bN6/4wBTXIH/rW9+K1l1yySVRvOKKK0axz7/bbrstisNTHyO/ww8/PIr949/JNnthXf1RRx0VrXv33Xej+MILL4ziMtam8wkyAAAAEGCCDAAAAASYIAMAAAABapA74POf/3xt2feU9D2YJ06c2JYxoZjhw4fXlv/lX/4lWjdgwIAo9nWBF1xwQRS38zSg6B477rhjFB9//PFR/Ne//jWK//CHP7R8TGi/J598srZ8wgknROsarTlO42uIfW3ptttu27LbhrTqqqtG8Q477JC6vf9dUzuFPbN9Tf2ECROiOOv8EmXAJ8gAAABAgAkyAAAAEGCCDAAAAASoQW6DnXbaKYq/+tWv9rjtwQcfHMX/+Mc/WjImNMdNN91UW15jjTVSt/31r38dxfQDRT123333KF599dWj+O67747ixYsXt3xMaD7fA9/bfvvt2zSSmJlFsR9n1ri/8Y1vRPHRRx/dnIH1Ev63LOuss04UX3/99e0cTqoNNtigx3XdOJfhE2QAAAAgwAQZAAAACDBBBgAAAALUILfBfvvtF8X9+vWrLd93333Ruscee6wtY0IxBx54YBRvtdVWPW77wAMPRPHXv/71VgwJy7ktttgiipMkieIbb7yxncNBk5x88slR/N5773VoJOkOOOCAKN5yyy2j2I/bxxz3GrNw4cIofuqpp6J4s802i2L/G4X58+e3ZmCShg0bFsWHHXZYj9s+/PDDLRtHq/AJMgAAABBgggwAAAAEmCADAAAAAWqQW2DQoEFRvM8++0Tx22+/XVv29VnvvPNO6waG3Hxv46997WtRHNaTe75WbNGiRc0bGJZba6+9dhTvvPPOUTxx4sQovuWWW1o+JjSfr+3tpDXXXDOKN9lkk9qyP+ZlmTt3bhTzntaYN998M4p9//xDDz00iu+4444ovuSSSwrf9qabbhrFvs/xmDFjotj/PqLedWXFJ8gAAABAgAkyAAAAEGCCDAAAAASoQW6BM844I4p938i77767tvzoo4+2ZUwo5stf/nIUb7vttj1ue+utt0Yx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4oujeJ999oni5557LvX6Dz30UG154cKF0Tpfv+X5+uaddtopdfs8Lrvssij299OP9a233ori6dOn15ZHjx4drfM1s77mp6x8/ZzvQRvWyOWtOfb1XF/60pei2D/e8+fP7/G6nq/JPOKII6L47bffjmL/XLZTnvrRMMfKLO03DlL68Sbsd10P3084ja85zqoT9vz2/lh39NFH93hdP84ZM2ak3paXJ098f9asmvBOaGRMWbWi/tiRt0f7pZdeWlv2db5+33kdcsghPcZTp06N1vl88u/rr7/+ehTnzalQI3242ynv4x/+HmvOnDnROp8X/nUzadKkKPavwT333DOKw77oN910U65x5pX2Huj7/h900EFRvPLKK0dx+Psp6YO17GFu+BwM35clapABAACApmCCDAAAAASYIAMAAACBttYg5625SrPqqqtG8W233RbF48ePj+IrrrgiijfZZJMo3nLLLWvLu+22W7Ruhx12iGJfc+lrfrKEvYofe+yxaJ3vpXnYYYdFsa8T9vfLPy5hn86BAwdG63xf6gULFqQNuzTWXnvt1PVrrbVWbdnX8SZJEsV+va/n8vV3efhxnnHGGVHsn48JEyZE8Z///OconjlzZt237WuufJ/OZho1alTL9t1Mvr7U1/al9V3PW8Pme3b6vPL9ytO2zfKVr3wlin3Ozp49u8frZtV4+t8t+Jzt7cK6SF/P7Wsq89SlS3HNsSRtsMEGteX+/ftH63y+eb7Xdp6ael+r72tJt99++yhebbXVotjX2PvzDIRj93ME/5jlOQa207x581LXr7POOlHct+/7U6+seZHvj+97sPs+6D/60Y+i+Pbbb68t+/NDZP1uxltppZWiOCvvQgceeGCu2/L8Yxweo8PXhvTB41rRvOETZAAAACDABBkAAAAIMEEGAAAAAm2tQc4rrH3yvW69++67L4pfeOGFKPY1hf5c6X/84x9ryxdccEG07nOf+1wU+3OK33LLLVHs+5BuvPHGUXzDDTfUln1dja/v8j2Ws3oAe/76ad588826t+0kXweVxtd65q3vzNuTNuT7HJ944omp2/s6qv/+7/+O4rD2LKs22tfXNlMjj0knZT0mYX26r8/3fF752lzfw7OZj5nf1zbbbJO6Po+scfn77X8TEdZq+zpAX8ed59jULnl7NYfPs39sfG1pWt259ME61f/8z/+M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vepimeRUj2TNKmnPTa01txrLdKZyeymXXHKJq23uWHsWap/RSZMmuVo/t2ZtNAtls2na81fl3hO+LPq5NSepGVnbk1J732qGMkXXieY/NQ9m/fGPf3S17WPaaFu3bnW1Zss0b57Kn9t9UzOIep/7KvazDaFvdl33FR0b9joG/U46N+n6TuXnZsyYEX2/mB07drhar1u46qqrXJ2zHxe93kLXk12n2os+N9ddBfr9NLdu69ze2Ndee210WcqOudztpNtZx+OWLVsGfO3HP/5xV5999tmu1s+tdU7mWI/zU6dOrfu1/yteffVVV8+dO7fu18auhQih+LhavHjxgH+7Z8+e6Hvp+WHqHM+OM30uda5TL/6DDAAAABicIAMAAAAGJ8gAAACAUWoGWaVyIieddFLtcSrfVTQH2dXVVXusvS112ancjj6vWZqenp7aY82lHnvssa7WbLRmkE888URXa7/bnCxOo3tpNopmXrXnrPb0HTt2bO1xZ2ene65ozvr66693tWbmLM1gag4+97PE8mGpfpa57LjR3KVmd6tKs7uaF9dMsu3bq99Zt9Wpp57q6k2bNkU/i2Y87bZMjYMFxi4kwwAADPdJREFUCxa4uqOjw9W292h/YuNG9y2tbT/c/uicYdeb9qYfPXq0q6uYSdbvr2Nm165ddb9XKs+5ZMmS+j9YiM/PqWNS6rNor/7TTz+99vjTn/50vR8xhND3GPSxj33M1XrMs8dencc02x/LSleJXjukxyF7nYxe05SaD3QdXHHFFa5+6KGHXH333XdH389atGiRq+fMmeNqza5PmzbN1bHztNzjRs45nV5vorZv35617P/Hf5ABAAAAgxNkAAAAwOAEGQAAADCGNIOcYnOQRXv4arYplh1V48aNq/tvQwhhxYoVrta+kc8991zt8fPPP5/13trvL/W87WebWoeau6wKze5qr+hYvi6VvUtl97Tv8TnnnDPgez322GOufvTRR6PLTrFZalW0f2UOzcEPlwyy0vxoe3u7q23mLdV/XHt6Fln/+tozzjjD1fpZVq9e3bBla8ZY+zdrBlTzktq71NY2WxqCz3iH0Pd6iyrQ9aE5dc2et7S01B7rulO6z+bOt7Ee7kX3/1tvvdXVCxcurD1ev3599LXbtm1z9QMPPODql156ydU5veh1P4vNiVWic6bNHIfge/nnXovyrW99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\n",
      "text/plain": [
       "<Figure size 720x576 with 15 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pred_cln = predict_from_logits(model(cln_data))\n",
    "pred_untargeted_adv = predict_from_logits(model(adv_untargeted))\n",
    "pred_targeted_adv = predict_from_logits(model(adv_targeted))\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "plt.figure(figsize=(10, 8))\n",
    "for ii in range(batch_size):\n",
    "    plt.subplot(3, batch_size, ii + 1)\n",
    "    _imshow(cln_data[ii])\n",
    "    plt.title(\"clean \\n pred: {}\".format(pred_cln[ii]))\n",
    "    plt.subplot(3, batch_size, ii + 1 + batch_size)\n",
    "    _imshow(adv_untargeted[ii])\n",
    "    plt.title(\"untargeted \\n adv \\n pred: {}\".format(\n",
    "        pred_untargeted_adv[ii]))\n",
    "    plt.subplot(3, batch_size, ii + 1 + batch_size * 2)\n",
    "    _imshow(adv_targeted[ii])\n",
    "    plt.title(\"targeted to 3 \\n adv \\n pred: {}\".format(\n",
    "        pred_targeted_adv[ii]))\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Construct defenses based on preprocessing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from advertorch.defenses import MedianSmoothing2D\n",
    "from advertorch.defenses import BitSqueezing\n",
    "from advertorch.defenses import JPEGFilter\n",
    "\n",
    "bits_squeezing = BitSqueezing(bit_depth=5)\n",
    "median_filter = MedianSmoothing2D(kernel_size=3)\n",
    "jpeg_filter = JPEGFilter(10)\n",
    "\n",
    "defense = nn.Sequential(\n",
    "    jpeg_filter,\n",
    "    bits_squeezing,\n",
    "    median_filter,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Process the inputs using the defense\n",
    "here we use the previous untargeted attack as the running example. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "adv = adv_untargeted\n",
    "adv_defended = defense(adv)\n",
    "cln_defended = defense(cln_data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualization of defenses"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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jqWwv2vJkiWJnuvCCy8M4v79++fdftKkSYn2j5Zh4MCBQfzd7343iO+6665aDgdVcu655+aWR40aFazbf//9y9r3F7/4xSDeZpuPr53NmDEjWPeXv/ylrOdCdbVuHZZ1w4cPr9NIQtOmTQviCy64IIg7deoUxP5nJ+qFK8gAAACAhwIZAAAA8FAgAwAAAJ6tpgf5+uuvD+Kk9xgfN25cbnn16tXBurjvtJYWLVoUxPFxxn09KM+jjz4axHvssUcQx7nR1NRU8nOdeOKJQdymTZuS94WWq1+/fkHcsWPHIJ44cWIth4Mquemmm3LLmzZtqui+jzvuuGbj+fPnB+vi89b06dMrOhaU58tf/nIQH3TQQbnluH6opXge//gzN/F5ix5kAAAAIGUokAEAAAAPBTIAAADg2Wp6kON5jwcNGhTEb7zxRhDH/S+DBw/OLX/pS18K1h144IFBvHDhwiDu1atXorFu2LAht7x8+fJgXTwPb2zBggVBTA9ydcX9d+UYP358EO+55555t3/xxRfzxoAkXXTRRUEc5yzniMb02GOPBbE/N3G53n333SBes2ZNEPfu3Tu3vNtuuwXrXnrppSBu1apVxcaF5OJ50O+5554gnjNnTm752muvrcmYtuToo4+u23OXiivIAAAAgIcCGQAAAPBQIAMAAACeraYHecqUKXnj2OTJk5td16VLlyD2+5OlT/b0DR06tJgh5qxbty63/I9//CNYN3PmzCCO5w6cO3duoudC/YwYMSKIr7zyyiBu27ZtEC9btiyIL7nkkiBeu3ZtBUeHRhXP8T5kyJAgjs8paZhPFIUdcsghQRzPb+3PfZx0HuRbb701iJ944okgfu+994L4K1/5Sm750ksvzbvv73znO0E8YcKERGNDeeKfT6dOnYL4qKOOyi3HvebVFNcucX5Xei7vauAKMgAAAOChQAYAAAA8W02LRSWtXLkyiJ966qm82xdq58jn+OOPD+K4vePVV18N4nvvvbfk50JtxW99xy0VsfiWwM8880zFx4TGF79VGYunjkQ6xa0y8bm9W7duRe8rntrvgQceCOIrrrgiiAu1a/n7O+uss4J13bt3D+L49sXt27cP4ptvvjmI169fn/e5kd/o0aODePjw4UE8e/bsIP7b3/5W9TFtSdz6EbdUPP3000G8atWqag8pMa4gAwAAAB4KZAAAAMBD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VZMxoTQ9e/bMLX/+858P1rVr1y6I477Aq6++OohreRtQNI6DDjooiE877bQgfvnll4P4ySefrPqYUHvTpk3LLZ9++unBunJ7jvOJe4jj3tKhQ4dW7bkhde7cOYgPPPDAvNvHn2uqJX/O7LinfubMmUFc6P4SacAVZAAAAMBDgQwAAAB4KJABAAAADz3INXDwwQcH8cUXX9zstqNGjQri1157rSpjQmU88MADueUddtgh77a/+93vgpj5QFGMQw89NIi7du0axJMnTw7idevWVX1MqLx4DvzYAQccUKORhMwsiONxFhr3FVdcEcQnn3xyZQbWQsSfZdlll12C+N57763lcPLq27dvs+sasZbhCjIAAADgoUAGAAAAPBTIAAAAgIce5BoYPnx4ELdp0ya3PGXKlGDd1KlTazImlOboo48O4n333bfZbZ9++ukg/tGPflSNIWErN2jQoCB2zgXx/fffX8vhoELGjRsXxJs2barTSPIbOXJkEA8ePDiI43HHMee98qxevTqIX3nllSAeOHBgEMefUWhqaqrOwCT16NEjiEePHt3sts8991zVxlEtXEEGAAAAPBTIAAAAgIcCGQAAAPDQg1wFHTp0COIjjzwyiD/66KPcctyftX79+uoNDInFcxv/4Ac/CGK/nzwW94qtWbOmcgPDVmunnXYK4mHDhgXxrFmzgvihhx6q+phQeXFvbz117949iPv3759bjs95hSxfvjyI+ZtWng8//DCI4/nzjz/++CCeNGlSEN94440lP/dee+0VxPE8x7179w7i+PMRxa5LK64gAwAAAB4KZAAAAMBDgQwAAAB46EGugvHjxwdxPG/k5MmTc8vPP/98TcaE0nzve98L4qFDhza77cMPPxzEzP+JUpx66qlBHM81+qc//amGo0FLcOmllwbx2WefXfRj582bF8Rx/i5YsKDUYWELLr/88iA2syD+2te+FsT33HNPyc+1YsWKII77iLt161b0vn7zm9+UPI564QoyAAAA4KFABgAAADy0WFRA/JbGD3/4wyB+//33g/iqq66q+phQGRdccEHR255zzjlBzLRuKEU8dVJs5cqVNRoJtlaPPfZYEPfr16/kfc2cOTOIn3322ZL3hcLi1/uEE04I4rilM56aLYlCt7H/7W9/G8QnnXRSs9vG09U1Aq4gAwAAAB4KZAAAAMBDgQwAAAB4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11aaQdba5vG1mp7Tofs91q81q/exXOY4d82BrtDPkY4nqZr2o5z3lMqdR6N9Qfft1q1bB16W0uy1jj2aadbjbRv4BhkAAAAImCADAAAAARNkAAAAIBhrBvmpp55K3q95r5g50fqITWlOL2ay3v72t9fuO/vss2vt++67r9bWjHJOzNpo3uiQQw4pWpbSXFvMDE1LxrjLtHZppPkszSuW1nNWsS64Zr8076ye97zn1dpNMsg//vGPa22t+dkV+tnSTJuud8wJ52q36uc0nsNgtvd4deyxx9basW987nOfq933xBNP1NqXXnqplWiSGdX3qXlR7XeaA0zlJ7Wmahf7Ta4mtb7/UdY+11z7Jz/5yVr7G9/4xsxtPUadc845tbbWNdc+dvrpp9faN9xwQ609ylrySut4x2Nvrp5tbv90RW6sj+dx6HjaplHv11WrVtXaGzZsmLm9ZcuW5GvrfETPj9izZ0+tvWDBglq76TUjBsE3yAAAAEDABBkAAAAImCADAAAAgY8625tywgkn1F7soYceqt2vNShHKZe9OeOMM2Zuf/rTn04+VjPIH/rQh2rttWvXDrxemrk69NBDB37uIGLOR2sxai3Mhx9+uNauqipdlHJMtN80Meoc9tFHHz1zW/OJqTz4IErW9bjjjqu1Nas3yvedex/3339/J/rNwoULa/1G62iWZNpifV+z8ixkm/n/UeYKdT31fesYksrg7rfffsm2Zm5379498X7zjGc8o9ZnSmrSah3XSdazLdVm5lhpLe14PsQxxxxTu+/xxx+vtY844ohauytjjbvX+k1ue45yPNC69Lma7KP09a9/vda+5pprZm7feuutRcvS2tFa61/Ph4jngeg5NjmD9hu+QQYAAAACJsgAAABAMNYyb0ojFfHnarPxXppUy96knHjiibW2Xm51nD9X5ZSsS5fWu4mu/Jzd5s9seknWNssfTWu/0J/snvOc59TaGqmIbf3ZUsu4HX/88bV26aWnU3KxhlHK9UHdhvrzuJbsiqWaDjjggOSy9H12QWksIh6j9P2NM2JROtZo/06V3NLYQ6mScU5jl+OMC4xTV8bUpjFALS/YhB7DFi9ePLJlD4tvkAEAAICACTIAAAAQMEEGAAAAgolmkLuSw1FaTmTr1q219rJly2rtSb4PLYPT5Tx0W5pkeXOlmUq2Xy7PpTnWJnKXZG1q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\n",
      "text/plain": [
       "<Figure size 720x720 with 20 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pred_cln = predict_from_logits(model(cln_data))\n",
    "pred_cln_defended = predict_from_logits(model(cln_defended))\n",
    "pred_adv = predict_from_logits(model(adv))\n",
    "pred_adv_defended = predict_from_logits(model(adv_defended))\n",
    "\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "plt.figure(figsize=(10, 10))\n",
    "for ii in range(batch_size):\n",
    "    plt.subplot(4, batch_size, ii + 1)\n",
    "    _imshow(cln_data[ii])\n",
    "    plt.title(\"clean \\n pred: {}\".format(pred_cln[ii]))\n",
    "    plt.subplot(4, batch_size, ii + 1 + batch_size)\n",
    "    _imshow(cln_data[ii])\n",
    "    plt.title(\"defended clean \\n pred: {}\".format(pred_cln_defended[ii]))\n",
    "    plt.subplot(4, batch_size, ii + 1 + batch_size * 2)\n",
    "    _imshow(adv[ii])\n",
    "    plt.title(\"adv \\n pred: {}\".format(\n",
    "        pred_adv[ii]))\n",
    "    plt.subplot(4, batch_size, ii + 1 + batch_size * 3)\n",
    "    _imshow(adv_defended[ii])\n",
    "    plt.title(\"defended adv \\n pred: {}\".format(\n",
    "        pred_adv_defended[ii]))\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### BPDA (Backward Pass Differentiable Approximation)\n",
    "BPDA is a method proposed in [1], which can be used to attack non-differentiable preprocessing based defenses. Here we use $f(x)$ to denote a non-differentiable component, and $g(x)$ to denote a differentiable component that is similar to $f(x)$. In BPDA, $f(x)$ is used in forward computation, and in the backward computation $g(x)$ is used to propagate down the gradients.\n",
    "\n",
    "Here we use BPDA to perform adaptive attack towards the defenses we used above.\n",
    "\n",
    "[1] Athalye, A., Carlini, N. & Wagner, D.. (2018). Obfuscated Gradients Give a False Sense of Security: Circumventing Defenses to Adversarial Examples. Proceedings of the 35th International Conference on Machine Learning, in PMLR 80:274-283"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "from advertorch.bpda import BPDAWrapper\n",
    "defense_withbpda = BPDAWrapper(defense, forwardsub=lambda x: x)\n",
    "defended_model = nn.Sequential(defense_withbpda, model)\n",
    "bpda_adversary = LinfPGDAttack(\n",
    "    defended_model, loss_fn=nn.CrossEntropyLoss(reduction=\"sum\"), eps=0.15,\n",
    "    nb_iter=1000, eps_iter=0.005, rand_init=True, clip_min=0.0, clip_max=1.0,\n",
    "    targeted=False)\n",
    "\n",
    "\n",
    "bpda_adv = bpda_adversary.perturb(cln_data, true_label)\n",
    "bpda_adv_defended = defense(bpda_adv)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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njdvXrLumWeeacYQ0QOMGjUqic3SS7bHNcdSWt81d+7cQvd16qmnJvEOO+yQuf1NN91UaP/oG3baaack/tznPpfEv/jFL9o5HLTISSedVFs+7LDDknW77757Q/ved999k3iddf752dnUqVOTdf/3f//X0H2htfr1S6d1kyZN6tBIUg8//HASf/7zn0/iIUOGJHF87kSn8AkyAAAAEGGCDAAAAESYIAMAAACRXlODfN555yVx0WuMn3jiibXlZcuWJet83Wk7zZ49O4n94/R1PWjMjTfemMTbbrttEvvcWLhwYd33dfTRRydx//79694X+q7x48cn8eDBg5P4qquuaudw0CIXXHBBbfmNN95o6r4PP/zwLuMZM2Yk6/xx65FHHmnqWNCY97znPUm811571Zb9/KGdfB9/f86NP25RgwwAAACUDBNkAAAAIMIEGQAAAIj0mhpk3/d45513TuInn3wyiX39yy677FJbfve7352s23PPPZN41qxZSTx27NhCY129enVt+eWXX07W+T683syZM5OYGuTW8vV3jTjttNOSePvtt8/c/o9//GNmDEjSF77whST2Ocsxome6+eabkzjuTdyoBQsWJPHy5cuTeNy4cbXlrbbaKln30EMPJfG6667btHGhON8H/Yorrkji6dOn15bPPffctoxpbQ499NCO3Xe9+AQZAAAAiDBBBgAAACJMkAEAAIBIr6lBvvPOOzNj79Zbb+1y3fDhw5M4rk+W1qzpmzhxYneGWLNq1ara8t/+9rdk3bRp05LY9w589tlnC90XOueQQw5J4m9+85tJPGDAgCR+6aWXkvjLX/5yEq9YsaKJo0NP5Xu877bbbknsjyll6CeKfPvtt18S+/7Wce/jon2QL7nkkiS+/fbbk3jJkiVJ/N73vre2fPrpp2fu+9/+7d+S+OKLLy40NjTGvz5DhgxJ4oMOOqi27GvNW8nPXXx+N7uXdyvwCTIAAAAQYYIMAAAARHpNiUUzLVq0KInvuuuuzO3zyjmyHHHEEUnsyzsef/zxJL7yyivrvi+0l//q25dUeP6SwPfcc0/Tx4Sez39V6fnWkSgnXyrjj+0jR47s9r58a79rr702ib/xjW8kcV65Vry/T33qU8m6jTfeOIn95YvXW2+9JL7ooouS+LXXXsu8b2Q78sgjk3jSpElJ/MwzzyTxn/70p5aPaW186Ycvqbj77ruTePHixa0eUmF8ggwAAABEmCADAAAAESbIAAAAQIQa5A7YZJNNass/+tGPknX+cqK+NdjChQtbNzA05Prrr0/iD3zgA5nb/+IXv0jir371q00fE3off2lZz9eEopz69++fxEVqjv35Ccccc0wSz58/v/6BKa1B/ta3vpWsO//885N48ODBSezz74Ybbkji+NLHKO6oo45KYv/8d7LNXlxXf+yxxybrXn/99SQ+55xzkriMtel8ggwAAABEmCADAAAAESbIAAAAQIQa5A74zGc+U1v2PSV9D+ann366LWNCfUaNGlVbfuc735msGzhwYBL7usCzzz47idt5GVD0HHvttVcSH3/88Un86KOPJvEdd9zR8jGh/R5++OHa8gknnJCsa7TmOIuvIfa1pRMnTmzZfUMaNmxYEu+5556Z2/vzmtop7pnta+qnTZuWxHnXlygDPkEGAAAAIkyQAQAAgAgTZAAAACBCDXIbvOtd70riL33pS11ue9hhhyXxX//615aMCc1x7bXX1pY32mijzG1/9atfJTH9QNEd+++/fxKPGDEiiW+99dYkXrVqVcvHhObzPfC9PfbYo00jSZlZEvtx5o37G9/4RhJ/9KMfbc7A+gh/LsuYMWOS+Morr2zncDJts802Xa7riXMZPkEGAAAAIkyQAQAAgAgTZAAAACBCDXIbTJo0KYn79+9fW77zzjuTdQ888EBbxoT6HHrooUm86667drnt3XffncRnnHFGK4aEXm7nnXdO4hBCEl9zzTXtHA6a5MQTT0ziN954o0MjyTZ58uQk3mWXXZLYj9vHHPcas2zZsiR+7LHHkninnXZKYn+OwsKFC1szMEmbbLJJEh955JFdbnvvvfe2bBytwifIAAAAQIQJMgAAABBhggwAAABEqEFugUGDBiXxgQcemMSvvvpqbdnXZ7322mutGxgK872Nv/KVryRxXE/u+Vqx5cuXN29g6LU222yzJN5nn32S+Omnn07i3/72ty0fE5rP1/Z20sYbb5zEO+ywQ23ZH/PyvPzyy0nM77TGrFy5Mol9//wjjjgiiW+66aYkPv/88+u+7x133DGJfZ/jcePGJbE/P6K768qKT5ABAACACBNkAAAAIMIEGQAAAIhQg9wCp512WhL7vpG33nprbfn+++9vy5hQn//4j/9I4okTJ3a57fXXX5/E9P9E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KVOmZI4zryYoy2OPPZbEe+65Z+b28fXHJenHP/5xt++rjDV/3dHMcRfdV5HaJZ+jvu70tNNOy1w/bdq0JP7jH/+YxHPmzKkt+37Mvq+prwXz75ciemre+F6Yvm44qy7br/PvO9+r2Ndd+td2iy22yB5sA77whS8ksc/ZrF7oeXnh+4f62kqfd3GfZF+X3RvF/fR9juTxOebPs7nggguS2Ncdx+Ie3mszYcKEJL733nuTeO+99+7ytv41fuihh5LY92T2Ncd5fb6z+Psu63kyedd4yKo59nzNseePx/4aEBdddFESx+c1nX322d0ex9o08vwfeuihmesnTpyYxP48jqz7zqtX9n3tu4tPkAEAAIAIE2QAAAAgwgQZAAAAiJS6BjmWVyt35513Zq73ffFuuummJI7rR++4445k3TXXXJPEvjbU18qMHz8+iX3tY1wTOH/+/GSd7xXoa8uef/75JM6rD/V9CnuiRmq821k/6+vQPv3pTyfxJz/5yczbv/TSS0nsczR+LL7OdJNNNknieq8935v494rvRerrBON+xL5mzfdUzuuX28z3nT92+ePNbrvtlsT+/TJq1Kjasq+NzuNrQBupZfe10I30cG8VX0vuH7+P4+fTH2vyesQOHjw4iddff/0kjvvX+v358xX87xxff/+5z30uiW+//fYkXrJkSRK/973vrS2feeaZyTpfI7v55psrS97xO6u2tKf+/vLHmqVLl3b7tkV/Z51++ulJPHXq1CSO+6AXGcfaxlJkbP513W+//ZLYv7b+OOf5825WrlxZW/bvSy/etgg+QQYAAAAiTJABAACASEdLLHz7F3956GaK2w9J2V8V+JYsd911V+a+/Vdls2bNytw+LqvYcccdk3XDhw9PYt+erujXknlfPcTyLkfcKT2lzZgfp//qO8+KFSuS+C9/+UuX244bNy5zX0Xb8fixx19J+ZxbvHhxoX2Xhf8K218mOX7vNXrp7bz3XVzese6662Zu648nu+++e+b2vgTDP+4s/qvIQYMGZW4/e/bsJI7bnvnjSdFLK3eCL01oJv+e9WVSvqSqyOvmSyb8JYV/9rOfdXtfknTFFVfUli+//PJk3RNPPJHE5513XhJ//etfT2J/LCpybOopx37fgs+XTnrx48q6PPPaHHnkkUm88847J/Fvf/vbJC5aVhFrpLzxU5/6VBL7koq7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lWYdF7uzPu516mvXe6O4z3zWZajX5i9/+UsS77HHHknsn9sTTzyxtuxr5H3Nsa959eco+BrjInWvn/vc55I475wQv29/nIxzKr5U+dqUsW5dWnNceef7xNv7GuS8Wn1/PlU7fx96hxxySJfrfF37H//4x0L79o/bX547rjvOO9bX+xzxCTIAAAAQYYIMAAAARJggAwAAAJG21iBvscUWSex7s3px3Yi/Lnde71vfLzGrz6tUrLbp4IMPTuK417AknXrqqUl8yy23dLkvX2/kDRo0KImHDh3anSGulX++fVzWms121lj5PtPf/va3k/iDH/xgEse1uo3WHPv6zokTJybxAQccUFv2NW6er0HMqzG84YYbkvjhhx/uctt77703ifPG0il5eRP3sJWk9ddfv7bs+3tuvfXWSexfK19vm3dsix122GFJvHLlyiS+8cYbk/iSSy7p9r49Xxfrj8m+vnyzzTYrtP+4L3v8fK5N3vkXPcHSpUtry/495/mcue6665L4LW95SxL7WtOY7/talK8P9ce9uIf1pz71qWRd3nEu7/eIr8ftjfz5Pln8sdkfO/KuhdBO/rXNmr/kzany5j7+/VR0/hird27DJ8gAAABAhAkyAAAAEGGCDAAAAETaWoPsaxV9jdWiRYvq3ndevWHe+rhGxW972223JbGv0/vNb36TxN/73vcy7yvm63S23XbbJPZ9kJGvmTXLX/7yl5P4wQcfTGLfVzY2efLkJPZ1rUcffXQSjx8/Pol9nWDc6/T5559P1vk6VV9r6vfldbKXZrtss802Sbxs2bIkjmv9/PvQ8z3E45rN7tw+7l8+adKkZJ2vVb3qqqsy95UnHouv+/X1pL7WOo+/fVbvX3+uRqO97Nshr+9z1mPwz7W/7R133JHEvi+yr00/+eSTa8v+WOH7IBfl73vKlCm15YEDBza07zzx+UX+vvxzlve+Kgt/rC/yHPak/uG+N/GTTz5ZW867zkLRntZFao6bhU+QAQAAgAgTZAAAACDCBBkAAACIWDuvbb7uuusmd+Z7/L7yyistu+8i1+q++uqrk3VHHnlkEj/11FNJvPvuuyexr20soky9iJ9++unsRoVtYmbtS9ImauVr6ft8+x6RResGm1mDHEIoRd5st912Sd74ev6tttoqifv16/qUDF8L6etLfW2kr1314uf70ksvTdb5Hrdf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VsUmLpErF7fISHC7bnFEBhmXl5BHPXuduoFzc6ianm74fhR99dDTf2qq65q5+xQAAAhmzSCPzByPzvTF7W0yL7gkS80uqpHXo5o5rmabMi5L5o4z7qvm/jSr53KBIzPH2K7q8xZrea+1cefGZY5VzBzr9lw/5ra9Vks9LnetR+rt6yt67hPV/VjiuItvkAEAAICAATIAAAAQMEAGAAAAglkzyFU9uWCXd9Es08j8SyVLCq+nzmaW45umsRlj9e233zbLlTrH03S7xmSl5mp127TJPu4ZiTnzddl79V7n5963Zcev/ZR7TsDJcsbVzLF73iHLmlav6ci6yJussbxJc2aSN2mTmWP3etdGN3nv/n98gwwAAAAEDJABAACAgAEyAAAAECwqg5zl9qr1ayvbnqY866Q5nGq+SPNflXxXb93RTeYRlyrmjkefX319zBnv7+836w4ODppllxPU9z4/P2+WY+bq77//Trelbfaff/5J30utNTMXbfMYtplBVrFv03bhcnw92Wptc09Rdt+otoGe5yV0nT7/oMuV/mObGeS1qOZnH7ruMfT5ktg2evulOY+rUkd8U3lkvkEGAAAAAgbIAAAAQLDViIX7uj8ra1Plft7Oypm4r++rJXfiT1C9pYAqlvSzb4X+ZDSSOydamu3169fN8vHx8b3bdtN06rXXKI5uO0YudFs3Nzf37sdoa2k3c1rSOdF2FNuw+2l95M+9L168GLat56jys7FGKF6+fNksf//9983yx48fm+Wrq6t7t12d1lqjIpXSgE+lPNomj8Ndj02WP6tELCrju2mq73fcnrbBUf0Y3yADAAAAAQNkAAAAIGCADAAAAASzZpDnzMBq/q3yXpqFcXmiSsk41PVkqlweXK+d5jdd5jgrRfjXX3+l7625QZd/jkZnjteaT89s8xjmLKGox/nNN9/cu17XaSbZ7bfrC59b3xefBdBjd88gqEo/p/2ayxzrdT85OWmW3717d+++uDah+10tZ1n5rCy1X1pSmTcV24buV29eWdu85s+j7H42TXkOflv4BhkAAAAIGCADAAAAAQNkAAAAINhqBnkkzRzrNL+a87m+vm6We7I4mltVbqrqh657yHqVZWSfA5ePc23y8PAwfX2s0Xx5edmsu7i4aJZ1KmqlOUI8HXN+9rJ2pLn4So3aqqeYR86ypq6f78neTlPbd+n9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\n",
      "text/plain": [
       "<Figure size 720x576 with 15 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pred_cln = predict_from_logits(model(cln_data))\n",
    "pred_bpda_adv = predict_from_logits(model(bpda_adv))\n",
    "pred_bpda_adv_defended = predict_from_logits(model(bpda_adv_defended))\n",
    "\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "plt.figure(figsize=(10, 8))\n",
    "for ii in range(batch_size):\n",
    "    plt.subplot(3, batch_size, ii + 1)\n",
    "    _imshow(cln_data[ii])\n",
    "    plt.title(\"clean \\n pred: {}\".format(pred_cln[ii]))\n",
    "    plt.subplot(3, batch_size, ii + 1 + batch_size)\n",
    "    _imshow(bpda_adv[ii])\n",
    "    plt.title(\"bpda adv \\n pred: {}\".format(\n",
    "        pred_bpda_adv[ii]))\n",
    "    plt.subplot(3, batch_size, ii + 1 + batch_size * 2)\n",
    "    _imshow(bpda_adv_defended[ii])\n",
    "    plt.title(\"defended \\n bpda adv \\n pred: {}\".format(\n",
    "        pred_bpda_adv_defended[ii]))\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
